//
//  ViewController.m
//  富文本Demo
//
//  Created by Dreamer on 2018/2/10.
//  Copyright © 2018年 dreamer. All rights reserved.
//

#import "ViewController.h"

#import "NSMutableAttributedString+Page.h"

#import "VVeboLabel.h"

@interface ViewController ()

@property (nonatomic, strong) VVeboLabel *label;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    NSDictionary *dictAttr0 = @{NSFontAttributeName:[UIFont systemFontOfSize:14]};
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:@"😳😊😳😊😳😊😳去年今日此门中，人面桃花相映红。人面不知何处去，桃花依旧笑春风。😳😊😳😊😳😊😳法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤" attributes:dictAttr0];
    
    [attributedString addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:20] range:NSMakeRange(0, 8)];
    
    NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
    style.lineSpacing = 10;
    [attributedString addAttribute:NSParagraphStyleAttributeName value:style range:NSMakeRange(0, attributedString.length)];
    
    NSArray *rangeArr = [attributedString pageRangeArrayWithConstrainedToSize:CGSizeMake(100, 100)];
    
    NSRange range = [rangeArr[0] rangeValue];
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 100)];
    label.lineBreakMode = NSLineBreakByWordWrapping;
    label.numberOfLines = 0;
    [self.view addSubview:label];
    
    label.attributedText = [attributedString attributedSubstringFromRange:range];
    
}

- (void)vv{
    VVeboLabel *label = [[VVeboLabel alloc] initWithFrame:CGRectMake(100, 100, 100, 88)];
    label.text = @"😳😊😳😊😳😊😳去年今日此门中，人面桃花相映红。人面不知何处去，桃花依旧笑春风。😳😊😳😊😳😊😳法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤就啊合适的风口浪尖阿萨德和疯狂拉升的合法的紧身裤";
    label.textColor = [UIColor colorWithRed:50/255.0 green:50/255.0 blue:50/255.0 alpha:1];
    label.font = [UIFont systemFontOfSize:10];
    label.textAlignment = NSTextAlignmentLeft;
    [self.view addSubview:label];
    self.label = label;
}

- (void)ttt {
    // 初始化NSMutableAttributedString
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];
    
        // 设置字体格式和大小
        NSString *str0 = @"设置字体格式和大小";
        NSDictionary *dictAttr0 = @{NSFontAttributeName:[UIFont systemFontOfSize:14]};
        NSAttributedString *attr0 = [[NSAttributedString alloc] initWithString:str0
                                                                    attributes:dictAttr0];
        [attributedString appendAttributedString:attr0];
    //
    //    // 设置字体颜色
    //    NSString *str1 = @"\n设置字体颜色\n";
    //    NSDictionary *dictAttr1 = @{NSForegroundColorAttributeName:[UIColor purpleColor]};
    //    NSAttributedString *attr1 = [[NSAttributedString alloc] initWithString:str1
    //                                                                attributes:dictAttr1];
    //    [attributedString appendAttributedString:attr1];
    //
    //    // 设置字体背景颜色
    //    NSString *str2 = @"设置字体背景颜色\n";
    //    NSDictionary *dictAttr2 = @{NSBackgroundColorAttributeName:[UIColor cyanColor]};
    //    NSAttributedString *attr2 = [[NSAttributedString alloc] initWithString:str2
    //                                                                attributes:dictAttr2];
    //    [attributedString appendAttributedString:attr2];
    //
    //    /*
    //     注：NSLigatureAttributeName设置连体属性，取值为NSNumber对象（整数），1表示使用默认的连体字符，0表示不使用，2表示使用所有连体符号（iOS不支持2）。而且并非所有的字符之间都有组合符合。如 fly ，f和l会连起来。
    //     */
    //    //设置连体属性
    //    NSString *str3 = @"fly";
    //    NSDictionary *dictAttr3 = @{
    //                                NSFontAttributeName:[UIFont fontWithName:@"futura" size:14],
    //                                NSLigatureAttributeName:[NSNumber numberWithInteger:1]
    //                                };
    //    NSAttributedString *attr3 = [[NSAttributedString alloc]initWithString:str3
    //                                                               attributes:dictAttr3];
    //    [attributedString appendAttributedString:attr3];
    //
    //    /*!
    //     注：NSKernAttributeName用来设置字符之间的间距，取值为NSNumber对象（整数），负值间距变窄，正值间距变宽
    //     */
    //
    //    NSString *str4 = @"\n设置字符间距";
    //    NSDictionary *dictAttr4 = @{NSKernAttributeName:@(4)};
    //    NSAttributedString *attr4 = [[NSAttributedString alloc]initWithString:str4
    //                                                               attributes:dictAttr4];
    //    [attributedString appendAttributedString:attr4];
    //
    //    /*!
    //     注：NSStrikethroughStyleAttributeName设置删除线，取值为NSNumber对象，枚举NSUnderlineStyle中的值。NSStrikethroughColorAttributeName设置删除线的颜色。并可以将Style和Pattern相互 取与 获取不同的效果
    //     */
    //
    //    NSString *str51 = @"\n设置删除线为细单实线,颜色为红色";
    //    NSDictionary *dictAttr51 = @{
    //                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle),
    //                                 NSStrikethroughColorAttributeName:[UIColor redColor]
    //                                 };
    //    NSAttributedString *attr51 = [[NSAttributedString alloc]initWithString:str51
    //                                                                attributes:dictAttr51];
    //    [attributedString appendAttributedString:attr51];
    //
    //    NSString *str52 = @"\n设置删除线为粗单实线,颜色为红色";
    //    NSDictionary *dictAttr52 = @{
    //                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleThick),
    //                                 NSStrikethroughColorAttributeName:[UIColor redColor]
    //                                 };
    //    NSAttributedString *attr52 = [[NSAttributedString alloc]initWithString:str52
    //                                                                attributes:dictAttr52];
    //    [attributedString appendAttributedString:attr52];
    //
    //    NSString *str53 = @"\n设置删除线为细单实线,颜色为红色";
    //    NSDictionary *dictAttr53 = @{
    //                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleDouble),
    //                                 NSStrikethroughColorAttributeName:[UIColor redColor]
    //                                 };
    //    NSAttributedString *attr53 = [[NSAttributedString alloc]initWithString:str53
    //                                                                attributes:dictAttr53];
    //    [attributedString appendAttributedString:attr53];
    //
    //    NSString *str54 = @"\n设置删除线为细单虚线,颜色为红色";
    //    NSDictionary *dictAttr54 = @{
    //                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle|NSUnderlinePatternDot),
    //                                 NSStrikethroughColorAttributeName:[UIColor redColor]
    //                                 };
    //    NSAttributedString *attr54 = [[NSAttributedString alloc]initWithString:str54
    //                                                                attributes:dictAttr54];
    //    [attributedString appendAttributedString:attr54];
    //
    //    /*!
    //     NSStrokeWidthAttributeName 设置笔画的宽度，取值为NSNumber对象（整数），负值填充效果，正值是中空效果。NSStrokeColorAttributeName  设置填充部分颜色，取值为UIColor对象。
    //     设置中间部分颜色可以使用 NSForegroundColorAttributeName 属性来进行
    //     */
    //    //设置笔画宽度和填充部分颜色
    //    NSString *str6 = @"设置笔画宽度和填充颜色\n";
    //    NSDictionary *dictAttr6 = @{
    //                                NSStrokeWidthAttributeName:@(2),
    //                                NSStrokeColorAttributeName:[UIColor blueColor]
    //                                };
    //    NSAttributedString *attr6 = [[NSAttributedString alloc]initWithString:str6
    //                                                               attributes:dictAttr6];
    //    [attributedString appendAttributedString:attr6];
    
    //设置阴影属性，取值为NSShadow对象
    NSString *str7 = @"\n\n\n设置阴影属性\n";
    NSShadow *shadow = [[NSShadow alloc]init];
    shadow.shadowColor = [UIColor redColor];
    shadow.shadowBlurRadius = 1.0f;
    shadow.shadowOffset = CGSizeMake(1, 1);
    NSDictionary *dictAttr7 = @{NSShadowAttributeName:shadow};
    NSAttributedString *attr7 = [[NSAttributedString alloc]initWithString:str7
                                                               attributes:dictAttr7];
    [attributedString appendAttributedString:attr7];
    
    //设置文本特殊效果，取值为NSString类型，目前只有一个可用效果  NSTextEffectLetterpressStyle（凸版印刷效果）
    NSString *str8 = @"设置特殊效果\n";
    NSDictionary *dictAttr8 = @{NSTextEffectAttributeName:NSTextEffectLetterpressStyle};
    NSAttributedString *attr8 = [[NSAttributedString alloc]initWithString:str8
                                                               attributes:dictAttr8];
    [attributedString appendAttributedString:attr8];
    
    //设置文本附件，取值为NSTextAttachment对象，常用于文字的图文混排
    NSString *str9 = @"文字的图文混排\n";
    NSTextAttachment *textAttachment = [[NSTextAttachment alloc]init];
    textAttachment.image = [UIImage imageNamed:@"logo"];
    textAttachment.bounds = CGRectMake(0, 0, 30, 30);
    NSAttributedString *tttt = [NSAttributedString attributedStringWithAttachment:textAttachment];
    
    NSDictionary *dictAttr9 = @{NSAttachmentAttributeName:textAttachment};
    NSMutableAttributedString *attr9 = [[NSMutableAttributedString alloc]initWithString:str9
                                                                             attributes:dictAttr9];
    [attr9 appendAttributedString:tttt];
    [attributedString appendAttributedString:attr9];
    
    /*!
     添加下划线 NSUnderlineStyleAttributeName。设置下划线的颜色 NSUnderlineColorAttributeName，对象为 UIColor。使用方式同删除线一样。
     */
    //添加下划线
    NSString *str10 = @"\n添加下划线\n";
    NSDictionary *dictAttr10 = @{
                                 NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
                                 NSUnderlineColorAttributeName:[UIColor redColor]
                                 };
    NSAttributedString *attr10 = [[NSAttributedString alloc]initWithString:str10
                                                                attributes:dictAttr10];
    [attributedString appendAttributedString:attr10];
    
    /*!
     NSBaselineOffsetAttributeName 设置基线偏移值。取值为NSNumber （float），正值上偏，负值下偏
     */
    //设置基线偏移值 NSBaselineOffsetAttributeName
    NSString *str11 = @"添加基线偏移值\n";
    NSDictionary *dictAttr11 = @{NSBaselineOffsetAttributeName:@(-10)};
    NSAttributedString *attr11 = [[NSAttributedString alloc]initWithString:str11
                                                                attributes:dictAttr11];
    [attributedString appendAttributedString:attr11];
    
    /*!
     NSObliquenessAttributeName 设置字体倾斜度，取值为 NSNumber（float），正值右倾，负值左倾
     */
    //设置字体倾斜度 NSObliquenessAttributeName
    NSString *str12 = @"设置字体倾斜度\n";
    NSDictionary *dictAttr12 = @{NSObliquenessAttributeName:@(0.5)};
    NSAttributedString *attr12 = [[NSAttributedString alloc]initWithString:str12
                                                                attributes:dictAttr12];
    [attributedString appendAttributedString:attr12];
    
    /*!
     NSExpansionAttributeName 设置字体的横向拉伸，取值为NSNumber （float），正值拉伸 ，负值压缩
     */
    //设置字体的横向拉伸 NSExpansionAttributeName
    NSString *str13 = @"设置字体横向拉伸\n";
    NSDictionary *dictAttr13 = @{NSExpansionAttributeName:@(0.5)};
    NSAttributedString *attr13 = [[NSAttributedString alloc]initWithString:str13
                                                                attributes:dictAttr13];
    [attributedString appendAttributedString:attr13];
    
    /*!
     NSWritingDirectionAttributeName 设置文字的书写方向，取值为以下组合
     @[@(NSWritingDirectionLeftToRight | NSWritingDirectionEmbedding)]
     @[@(NSWritingDirectionLeftToRight | NSWritingDirectionOverride)]
     @[@(NSWritingDirectionRightToLeft | NSWritingDirectionEmbedding)]
     @[@(NSWritingDirectionRightToLeft | NSWritingDirectionOverride)]
     
     ???NSWritingDirectionEmbedding和NSWritingDirectionOverride有什么不同
     */
    //设置文字的书写方向 NSWritingDirectionAttributeName
    NSString *str14 = @"设置文字书写方向\n";
    NSDictionary *dictAttr14 = @{NSWritingDirectionAttributeName:@[@(NSWritingDirectionRightToLeft | NSWritingDirectionEmbedding)]};
    NSAttributedString *attr14 = [[NSAttributedString alloc]initWithString:str14
                                                                attributes:dictAttr14];
    [attributedString appendAttributedString:attr14];
    
    /*!
     NSVerticalGlyphFormAttributeName 设置文字排版方向，取值为NSNumber对象（整数），0表示横排文本，1表示竖排文本  在iOS中只支持0
     */
    //设置文字排版方向 NSVerticalGlyphFormAttributeName
    NSString *str15 = @"设置文字排版方向\n";
    NSDictionary *dictAttr15 = @{NSVerticalGlyphFormAttributeName:@(0)};
    NSAttributedString *attr15 = [[NSAttributedString alloc]initWithString:str15
                                                                attributes:dictAttr15];
    [attributedString appendAttributedString:attr15];
    
    //段落样式
    NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc]init];
    //行间距
    paragraph.lineSpacing = 10;
    //段落间距
    paragraph.paragraphSpacing = 20;
    //对齐方式
    paragraph.alignment = NSTextAlignmentLeft;
    //指定段落开始的缩进像素
    paragraph.firstLineHeadIndent = 30;
    //调整全部文字的缩进像素
    paragraph.headIndent = 10;
    
    //添加段落设置
    [attributedString addAttribute:NSParagraphStyleAttributeName
                             value:paragraph
                             range:NSMakeRange(0, attributedString.length)];
    
    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 0, 300, 0)];
    label.backgroundColor = [UIColor lightGrayColor];
    //自动换行
    label.numberOfLines = 0;
    //设置label的富文本
    label.attributedText = attributedString;
    //label高度自适应
    [label sizeToFit];
    [self.view addSubview:label];
}


@end
